perm filename SAY2.SAI[4,ALS] blob sn#052859 filedate 1973-07-06 generic text, type T, neo UTF8
00010	BEGIN "SAY"
00020	DEFINE ⊂="COMMENT";  ⊂ 7/1/73 Runs SIG from FIX output;
00030	
00040	REQUIRE "SIG" LOAD_MODULE;
00050	REQUIRE "BLOCKS.HDR" SOURCE_FILE;
00060	EXTERNAL FORTRAN PROCEDURE SIG(REFERENCE INTEGER P);
00070	INTEGER ARRAY LFILE[0:'177];
00080	INTERNAL INTEGER ARRAY INDATA[0:4000];
00090	INTERNAL INTEGER H,I,J,K,L,M,N,P,NF;
00100	INTERNAL INTEGER FLAG,UPCNT,TABTOT;
00110	INTERNAL INTEGER SEGC,INTOT,SEGTOT,HINT,BPT,PHW,SMOCNT;
00120	INTEGER NEW,OLD,SUM,S1,S2,S3,S4,N1,N2,N3,N4,RL;
00130	INTEGER HINCNT,HCOUNT,HINDEX,EOF,EOFA,EOFB,BRK;
00150	INTEGER CHAN1,CHAN2,CHAN3,CHAN4,CHAN5;
00160	STRING READ1,FILEL,FILEI,TFILE,TFILEI,FILLST,PREHINT;
00170	LABEL START,ZZZZ,ZZZ,ZZ;
00190	DEFINE ⊂="COMMENT",CR="'15",LF="'12",TB="'11";
00200	DEFINE CRLF="CR&LF", CRLF0="CR&'177&'21"; ⊂ FOR CRLF W/O FORM FEED;
00210	DEFINE TABSIZ="256",TABNUM="16",ARRSIZ="4096";
00220	INTERNAL INTEGER ARRAY LRN[0:ARRSIZ];
00230	INTERNAL INTEGER ARRAY RES,USE[0:TABSIZ];
00240	BOOLEAN ER;
00250	
00260	STRING PROCEDURE HEADER;
00270	  BEGIN "HEADER"
00280	  STRING H1; INTEGER I,J,K;
00290	  IF HCOUNT>0 THEN BEGIN HCOUNT←HCOUNT-1;   HINCNT←HINCNT+1;
00300	    RETURN(PREHINT) END   ELSE WHILE HCOUNT=0 DO BEGIN "XX"
00310	  I←LFILE[HINDEX];  K←LDB(POINT(12,I,23)); J←SEGC-K; 
00320	  IF I=0 THEN BEGIN PREHINT←"NU"; HCOUNT←999; RETURN(PREHINT) END;
00330	  IF J ≥ 0 THEN BEGIN "LATCH"
00340	   H1←CVXSTR(LDB(POINT(12,I,11)) LSH 24);
00400	   IF H1≠0 THEN BEGIN
00410	     PREHINT←H1; HCOUNT←LDB(POINT(12,I,35));
00420	     HCOUNT←HCOUNT-J; HINDEX←HINDEX+1; HINCNT←HINCNT+1; 
00430	     RETURN(PREHINT); DONE  END
00440	     ELSE BEGIN PREHINT←"NU"; HCOUNT←LDB(POINT(12,I,35));
00450	     HCOUNT←HCOUNT-J; HINDEX←HINDEX+1; RETURN(PREHINT); DONE; END;
00460	  END "LATCH";
00470	 PREHINT←"NU"; RETURN(PREHINT); END "XX";
00480	END "HEADER";
00490	
00500	PROCEDURE SMOOTH;
00510	BEGIN "SMOOTH"
00520	 S1←S2←S3←S4←'200; SMOCNT←SMOCNT+1; END "SMOOTH";
00530	
00540	PROCEDURE UPDATE;
00550	BEGIN "UPDATE"
00590	
00600	OUTSTR(CRLF);
00610	CHAN1←GETCHAN; CLOSE(CHAN1); OPEN(CHAN1,"DSK",'10,10,2,0,0,EOF);
00620	ENTER(CHAN1,"RES.DAT",0); RENAME(CHAN1,"RES.OLD",0,0); CLOSE(CHAN1);
00630	OPEN(CHAN1,"DSK",'10,10,0,0,0,EOF); LOOKUP(CHAN1,"RES.OLD",0);
00670	CHAN3←GETCHAN; CLOSE(CHAN3); OPEN(CHAN3,"DSK",'10,0,10,0,0,0);
00680	ENTER(CHAN3,"RES.DAT",0);
00700	CHAN4←GETCHAN; CLOSE(CHAN4); OPEN(CHAN4,"DSK",'10,0,10,0,0,0);
00710	ENTER(CHAN4,"USE.DAT",0);
00720	
00730	FOR I←0 STEP 1 UNTIL TABNUM DO BEGIN
00740	  IF NAMES[I]=0 THEN DONE;
00750	  J←I*TABSIZ;
00760	  ARRYIN(CHAN1,RES[0],TABSIZ);
00780	
00790	  FOR K←0 STEP 1 UNTIL TABSIZ-1 DO BEGIN
00800	    L←J+K;
00810	
00820	    NEW←LDB(POINT(9,LRN[L],8));
00830	    OLD←LDB(POINT(9,RES[K],8));
00840	    SUM←S1←(OLD LSH 5)+NEW;
00850	
00860	    NEW←LDB(POINT(9,LRN[L],17));
00870	    OLD←LDB(POINT(9,RES[K],17));
00880	    S2←(OLD LSH 5)+NEW;  SUM←SUM+S2;
00890	
00900	    NEW←LDB(POINT(9,LRN[L],26));
00910	    OLD←LDB(POINT(9,RES[K],26));
00920	    S3←(OLD LSH 5)+NEW; SUM←SUM+S3;
00930	
00940	    NEW←LDB(POINT(9,LRN[L],35));
00950	    OLD←LDB(POINT(9,RES[K],35));
00960	    S4←(OLD LSH 5)+NEW; SUM←SUM+S4;
00970	
00980	    RES[K]←((S1 LSH -5) LSH 27)+((S2 LSH -5) LSH 18)
00990	      +((S3 LSH -5) LSH 9)+(S4 LSH -5);
01000	    LRN[L]←LRN[L] LAND '037037037037;
01010	    S1←(S1 LSH 9)%SUM; S2←(S2 LSH 9)%SUM;
01020	    S3←(S3 LSH 9)%SUM; S4←(S4 LSH 9)%SUM;
01030	    IF S1=512 THEN S1←511 ELSE IF S2=512 THEN S2←511 ELSE
01040	    IF S3=512 THEN S3←511 ELSE IF S4=512 THEN S4←511;
01050	    IF SUM=0 THEN SMOOTH;
01060	    USE[K]←(S1 LSH 27)+(S2 LSH 18)+(S3 LSH 9) +S4;
01070	    END;
01080	
01090	  ARRYOUT(CHAN3,RES[0],TABSIZ); ARRYOUT(CHAN4,USE[0],TABSIZ);
01100	  OUTSTR("Table "&CVXSTR(NAMES[I])&" has been updated with "
01110	   &CVS(SMOCNT)&" items smoothed"&CRLF); SMOCNT←0;
01120	  END;
01130	CLOSE(CHAN1); CLOSE(CHAN3); CLOSE(CHAN4);
01160	OUTSTR("Update completed."&CRLF);
01170	END "UPDATE";
     

00010	STDBRK(1);
00020	SETBREAK(14,"∃",NULL,"INS");
00030	
00040	FILEL←"LIST1";
00050	FILEI←"TOO1.DAT[1,THO]";
00060	CHAN1←1; CHAN2←2; CHAN3←3;  CHAN4←4; CHAN5←5;
00070	HEADIN;
00080	FOR I←0 STEP 1 UNTIL 15 DO IF NAMES[I]=0 THEN DONE; TABTOT←I*TABSIZ;
00090	OUTSTR("TABTOT= "&CVS(TABTOT)&CRLF);
00100	FLAG←0; SIG(P); FLAG←-1;  ⊂ To preset addrssses in SIG;
00110	CLOSE(CHAN1); OPEN(CHAN1,"DSK",'10,10,0,0,0,EOF);
00120	LOOKUP(CHAN1,"LRN.DAT",0);ARRYIN(CHAN1,LRN[0],TABTOT);CLOSE(CHAN1);
00130	FILEL←STRIN("Data file list (LIST1) = ");
00140	IF FILEL="" THEN FILEL←"LIST1";
00150	CLOSE(CHAN5); OPEN(CHAN5,"DSK",1,2,0,3500,BRK,EOFA);
00160	LOOKUP(CHAN5,FILEL,ER);
00170	WHILE ER DO BEGIN OUTSTR(CRLF&"Can't find "&FILEL&" File = ");
00180	LOOKUP(CHAN5,FILEL←INCHWL,ER); END;  EOFA←0;
00190	FILLST←INPUT(CHAN5,14); EOFA←0; RL←0;
00210	WHILE EOFA=0 DO BEGIN "LISTREAD"
00220	HINDEX←21; HCOUNT←HINCNT←0;
00230	FILEI←SCAN(FILLST,1,J); IF FILEI="" THEN DONE;
00250	
00260	CLOSE(CHAN4); OPEN(CHAN4,"DSK",'10,10,0,0,0,EOF);
00280	LOOKUP(CHAN4,FILEI,0); IF EOF≠0 THEN DONE;
00300	ARRYIN(CHAN4,LFILE[0],'200);	⊂ Input header;
00310	SEGTOT←(LFILE[0]*6)%256;
00320	OUTSTR(FILEI&" "&CVS(SEGTOT)&" seg. ");
00330	ARRYIN(CHAN4,INDATA[0],SEGTOT*4); CLOSE(CHAN4);
00350	BPT←POINT(6,INDATA[0],-1); HINDEX←21; HCOUNT←HINCNT←0;
00370	
00380	FOR SEGC←1 STEP 1 UNTIL SEGTOT DO BEGIN
00390	ZZ:  READ1←HEADER;
00400	  J←CVSIX(READ1);
00410	  FOR I←0 STEP 1 UNTIL 63 DO BEGIN   IF PHLIST[I]=0 THEN BEGIN
00420	    OUTSTR("Hint not identified for segment = "&READ1
00430	        &"   " &CVS(SEGC)&CRLF);DONE END;
00440	    IF PHLIST[I]=J THEN BEGIN HINT←HLIST[I]; PHW←J; DONE ; END;
00450	    END;
00460	
00470	FOR P←0 STEP 1 UNTIL 23 DO  INDAT[P]←ILDB(BPT);
00480	ZZZZ:  IF PHW≠CVSIX("NU") THEN SIG(P);
00490	ZZZ:	END;
00500	
00510	OUTSTR(CVS(HINCNT)&" hints . ");
00520	IF RL=0 THEN RL←1 ELSE BEGIN RL←0; OUTSTR(CRLF); END;
00530	IF EOFA≠0 THEN DONE;
00540	END "LISTREAD";
00550	UPDATE;
00560	CLOSE(CHAN1); OPEN(CHAN1,"DSK",'10,0,10,0,0,EOF);
00570	ENTER(CHAN1,"LRN.DAT",0);
00580	ARRYOUT(CHAN1,LRN[0],TABTOT); CLOSE(CHAN1); RELEASE(CHAN1);
00590	
00600	OUTSTR("Tables saved"&CRLF);
00610	END "SAY";